package cn.edu.neu.softlab.jason.offer.jianzhioffer.datastructure;

import java.math.BigDecimal;

/**
 * 剑指offer-面试11
 * 数值的整数次方
 * 实现函数 double power(double base, double exponent), 求base的exponent次
 * 方，不能使用库函数，同时不需要考虑大数问题
 */

public class Mianshi11 {
    public static void main(String[] args) {
        System.out.println(Math.pow(0.1, 2));
        // base 与 base1的数值是不同的, 在遇到double类型时，用string来构造
        BigDecimal base = new BigDecimal(Double.toString(0.1));
        BigDecimal base1 = new BigDecimal(0.1);
        System.out.println("bigdecimal用string类型构造为" + base);
        System.out.println("bigdediemal用double类型构造为"+base1);
        BigDecimal exp = new BigDecimal(Integer.toString(2));
        // bigdecimal的power使用biginteger来实现的
        System.out.println(base.pow(2));
    }

    public static double powerOffer(double base, int exponent) {
        double result = base;
        boolean flag = false;
        if (exponent < 0) {
            flag = true;
        }
        exponent = Math.abs(exponent);
        if (exponent == 0) {
            return 1;
        }
        for (int i = 0; i < exponent; i++) {
            result = result * base;
        }
        if (flag) {
            result = 1 / result;
        }
        return result;
    }
}
